package com.example.esp8266.Library.RoomLib;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.example.esp8266.Library.RoomLib.Dao_Interface.TaskGroupDao;
import com.example.esp8266.R;

import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

/**
 * TaskGroupAdapter 适配器类，用于显示任务组列表和新增任务项的 RecyclerView。
 */
public class TaskGroupAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private static final int VIEW_TYPE_TASK_GROUP = 0; // 任务组视图类型
    private static final int VIEW_TYPE_NEW_TASK = 1; // 新建任务视图类型

    private List<TaskGroup> taskGroups; // 任务组列表
    private Context context;
    private OnTaskGroupEditListener onTaskGroupEditListener;
    private OnTaskGroupCreateListener onTaskGroupCreateListener;
    private OnTaskGroupDeleteListener onTaskGroupDeleteListener;
    private OnTaskGroupRunListener onTaskGroupRunListener;


    /**
     * TaskGroupAdapter 构造函数
     * @param taskGroups 任务组列表
     * @param context 当前上下文
     */
    public TaskGroupAdapter(List<TaskGroup> taskGroups, Context context) {
        this.taskGroups = taskGroups;
        this.context = context;
    }

    // 添加点击事件监听器的接口
    public interface OnTaskGroupEditListener {
        void onTaskGroupEdit(TaskGroup taskGroup);
    }

    // 添加新任务组按钮点击事件监听器的接口
    public interface OnTaskGroupCreateListener {
        void onCreateNewTaskGroup();
    }

    // 添加运行任务组按钮点击事件监听器的接口
    public interface OnTaskGroupRunListener {
        void onTaskGroupRun(TaskGroup taskGroup);
    }

    // 添加删除任务组按钮点击事件监听器的接口
    public interface OnTaskGroupDeleteListener {
        void onTaskGroupDelete(TaskGroup taskGroup);
    }

    public void setOnTaskGroupEditListener(OnTaskGroupEditListener listener) {
        this.onTaskGroupEditListener = listener;
    }

    public void setOnTaskGroupCreateListener(OnTaskGroupCreateListener listener) {
        this.onTaskGroupCreateListener = listener;
    }

    // 添加运行任务组按钮点击事件监听器
    public void setOnTaskGroupRunListener(OnTaskGroupRunListener listener) {
        this.onTaskGroupRunListener = listener;
    }

    // 添加删除任务组按钮点击事件监听器
    public void setOnTaskGroupDeleteListener(OnTaskGroupDeleteListener listener) {
        this.onTaskGroupDeleteListener = listener;
    }

    @Override
    public int getItemViewType(int position) {
        // 根据位置返回不同的视图类型
        if (position < taskGroups.size()) {
            return VIEW_TYPE_TASK_GROUP;
        } else {
            return VIEW_TYPE_NEW_TASK;
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_TASK_GROUP) {
            // 根据任务组视图类型加载布局
            View view = LayoutInflater.from(context).inflate(R.layout.task_group_item, parent, false);
            return new TaskGroupViewHolder(view);
        } else {
            // 根据新建任务视图类型加载布局
            View view = LayoutInflater.from(context).inflate(R.layout.new_taskgroup_item, parent, false);
            return new NewTaskViewHolder(view);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder.getItemViewType() == VIEW_TYPE_TASK_GROUP) {

            // 绑定任务组数据到视图
            TaskGroup taskGroup = taskGroups.get(position);
            TaskGroupViewHolder taskGroupViewHolder = (TaskGroupViewHolder) holder;
            taskGroupViewHolder.taskGroupName.setText(taskGroup.groupName);

            // 默认状态设置为 "已停止" 且图标为运行图标
            taskGroupViewHolder.runStatus.setText("已停止");
            taskGroupViewHolder.task_group_Run.setImageResource(R.drawable.run_icon);

            // 设置编辑按钮的点击事件监听器
            taskGroupViewHolder.task_group_Edit.setOnClickListener(v -> {
                if (onTaskGroupEditListener != null) {
                    onTaskGroupEditListener.onTaskGroupEdit(taskGroup);
                }
            });

            // 设置运行按钮的点击事件监听器
            taskGroupViewHolder.task_group_Run.setOnClickListener(v -> {
                if (onTaskGroupRunListener != null) {
                    onTaskGroupRunListener.onTaskGroupRun(taskGroup);

                    // 切换状态并更新数据库
                    boolean newStatus = !taskGroup.isTask_group_RunStatus();
                    taskGroup.setTask_group_RunStatus(newStatus);

                    // 更新状态和图标
                    if (newStatus) {
                        taskGroupViewHolder.runStatus.setText("运行中");
                        taskGroupViewHolder.task_group_Run.setImageResource(R.drawable.pause);
                    } else {
                        taskGroupViewHolder.runStatus.setText("已停止");
                        taskGroupViewHolder.task_group_Run.setImageResource(R.drawable.run_icon);
                    }
                }
            });

            // 设置删除按钮的点击事件监听器
            taskGroupViewHolder.taskDelete.setOnClickListener(v -> {
                if (onTaskGroupDeleteListener != null) {
                    onTaskGroupDeleteListener.onTaskGroupDelete(taskGroup);
                }
            });

        } else {
            // 绑定新建任务项的点击事件
            NewTaskViewHolder newTaskViewHolder = (NewTaskViewHolder) holder;
            newTaskViewHolder.taskGroupCreateBtn.setOnClickListener(v -> {
                if (onTaskGroupCreateListener != null) {
                    onTaskGroupCreateListener.onCreateNewTaskGroup();
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        // 返回项数，如果任务组为空则返回1以显示新增任务项
        return taskGroups.size() > 0 ? taskGroups.size() + 1 : 1; // +1 表示新增任务项
    }

    /**
     * TaskGroupViewHolder 视图持有类，用于任务组项
     */
    public static class TaskGroupViewHolder extends RecyclerView.ViewHolder {
        TextView taskGroupName;
        TextView runStatus;
        ImageView taskDelete;
        ImageView task_group_Run;
        ImageView task_group_Edit;

        public TaskGroupViewHolder(View itemView) {
            super(itemView);
            taskGroupName = itemView.findViewById(R.id.taskgroup_name);
            runStatus = itemView.findViewById(R.id.run_status);
            taskDelete = itemView.findViewById(R.id.task_group_delete);
            task_group_Run = itemView.findViewById(R.id.task_group_run);
            task_group_Edit = itemView.findViewById(R.id.task_group_edit);
        }
    }

    /**
     * NewTaskViewHolder 视图持有类，用于新增任务项
     */
    public static class NewTaskViewHolder extends RecyclerView.ViewHolder {
        ImageView taskGroupCreateBtn;

        public NewTaskViewHolder(View itemView) {
            super(itemView);
            taskGroupCreateBtn = itemView.findViewById(R.id.taskgroup_create_btn);
        }
    }
}